home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 0.9 version / MFINTOBJ.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-24  |  7.6 KB  |  221 lines  |  [TEXT/MPS ]

  1. #ifndef MF3D_INTOBJECTS_H
  2. #define    MF3D_INTOBJECTS_H
  3. /*==============================================================================
  4.  *
  5.  *    File:        MFINTOBJ.H
  6.  *
  7.  *    Function:    Structure definitions for Metafile objects not returned
  8.  *                by MF3DReadAnObject().
  9.  *
  10.  *    Author(s):    Rick Wong (RWW)
  11.  *
  12.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  13.  *
  14.  *    Change History (most recent first):
  15.  *        Fabio    Changed file name to 8 characters
  16.  *        F3A_RWW    TOC works.
  17.  *        F2R_RWW    Simple object model: most objects moved to "MFSUBOBJ.H".
  18.  *        F26_RWW    File created.
  19.  *==============================================================================
  20.  */
  21. #if defined(__COMPILING_ON_MACINTOSH__)
  22. #pragma once
  23. #endif
  24.  
  25. #include "MFIOCALL.H"
  26. #include "MFOBJCTS.H"
  27. #include "MFSUBOBJ.H"
  28. #include "MFTYPES.H"
  29.  
  30. /*==============================================================================
  31.  *    TableOfContents
  32.  *==============================================================================
  33.  */
  34. #define    kMF3DObjTableOfContents                    MF3DObjectType('t','o','c',' ')
  35. #define    kMF3DObjTableOfContentsText                "TableOfContents"
  36.  
  37. #define    kMF3DTocEntryType        1            /* always write type 1            */
  38. #define    kMF3DTocEntrySize        16
  39.  
  40. typedef struct MF3D_TOCEntryRec
  41. {    MF3DReferenceID                refID;
  42.     MF3DPositionReferencePtr    objLocation;
  43.     MF3DObjType                    objType;    /* valid if tocEntryType >= 1    */
  44. } MF3D_TOCEntryRec, *MF3D_TOCEntryPtr;
  45.  
  46. typedef struct MF3DTableOfContentsObj
  47. {    MF3DObjHeader
  48.     MF3DPositionReferencePtr    nextTOC;    /* next Table of Contents        */
  49.     MF3DReferenceID                refSeed;
  50.     MF3DInt32                    typeSeed;
  51.     MF3DUns32                    tocEntryType;
  52.     MF3DUns32                    tocEntrySize;
  53.     MF3DUns32                    nEntries;
  54.     MF3D_TOCEntryPtr            tocEntries;    /* size: nEntries                */
  55. } MF3DTableOfContentsObj, *MF3DTableOfContentsObjPtr;
  56.  
  57. /*==============================================================================
  58.  *    MF3D_TOCStuff
  59.  *
  60.  *    Reference ID lookup tables for table of contents
  61.  *==============================================================================
  62.  */
  63. typedef    union MF3D_TOCPosition
  64. {    MF3DCStringPtr            name;
  65.     MF3DBinaryFilePosition    location;
  66. } MF3D_TOCPosition, *MF3D_TOCPositionPtr;
  67.  
  68. typedef    struct MF3D_TOCReference
  69. {    MF3DUns32                refID;
  70.     MF3D_TOCPosition        ref;
  71.     MF3DObjType                type;
  72. } MF3D_TOCReference, *MF3D_TOCReferencePtr;
  73.  
  74. typedef    struct MF3D_TOCStuff
  75. {    MF3DCStringPtr            tocLabelName;    /* txt: TOC label                */
  76.     MF3DUns32                refSeed;        /* next available ref num        */
  77.     MF3DInt32                typeSeed;        /* next available type num        */
  78.     MF3DUns32                numReferences;    /* number of refs in TOC        */
  79.     MF3D_TOCReferencePtr    references;        /* pointer to refs array        */
  80.     /* the object type needs to be updated if we get a label on a container    */
  81.     MF3DBoolean                needToUpdate;
  82. } MF3D_TOCStuff, *MF3D_TOCStuffPtr;
  83.  
  84. /*==============================================================================
  85.  *    Type (User-defined type)
  86.  *==============================================================================
  87.  */
  88. #define    kMF3DObjType                            MF3DObjectType('t','y','p','e')
  89. #define    kMF3DObjTypeText                        "Type"
  90.  
  91. typedef struct MF3D_TypeList
  92. {    MF3DInt32            number;
  93.     MF3DCStringPtr        name;
  94. } MF3D_TypeList, *MF3D_TypeListPtr;
  95.  
  96. typedef    struct MF3D_TypeTable
  97. {    MF3DUns32            nTypes;
  98.     MF3D_TypeListPtr    types;
  99. } MF3D_TypeTable, *MF3D_TypeTablePtr;
  100.  
  101. /*==============================================================================
  102.  *    Object Table
  103.  *
  104.  *    During the first-pass read of a text file, we store the locations of all
  105.  *    the objects in the file. We resolve objRefID when we get to the
  106.  *    Table of Contents.
  107.  *==============================================================================
  108.  */
  109. typedef    struct MF3D_ObjectTableEntry
  110. {    MF3DBinaryFilePosition        objLocation;
  111.     MF3DReferenceID                objRefID;
  112. } MF3D_ObjectTableEntry, *MF3D_ObjectTableEntryPtr;
  113.  
  114. typedef    struct MF3D_ObjectTable
  115. {    MF3DUns32                    numObjects;
  116.     MF3D_ObjectTableEntryPtr    objects;    /* size: numObjects + 1            */
  117. } MF3D_ObjectTable;
  118.  
  119. /*==============================================================================
  120.  *    MF3D_ReadBuffer
  121.  *
  122.  *    We read one object in at a time. This prevents us from scanning past the
  123.  *    end of an object.
  124.  *==============================================================================
  125.  */
  126. typedef    struct MF3D_SaveBuffer    MF3D_SaveBuffer, *MF3D_SaveBufferPtr;
  127. struct MF3D_SaveBuffer
  128. {    MF3DUns32            bufSize;
  129.     MF3D_SaveBufferPtr    next;
  130. };
  131.  
  132. typedef struct MF3D_ReadBuffer
  133. {    char                *buf;                /* the actual buffer            */
  134.     MF3DUns32            bufPos;                /* current position in buffer    */
  135.     MF3DUns32            bufSize;            /* bin: size of buffer            */
  136.     MF3D_SaveBufferPtr    saveSize;            /* bin: stack of buffer sizes    */
  137. } MF3D_ReadBuffer;
  138.  
  139. /*==============================================================================
  140.  *    MF3D_WriteStack
  141.  *
  142.  *    When writing containers in a binary file format, we write a phony size until
  143.  *    we reach the end of the container. Then, we backpatch the real size.
  144.  *    So, we need to store the container size locations as we get them.
  145.  *==============================================================================
  146.  */
  147. typedef    struct MF3D_WriteStack    MF3D_WriteStack, *MF3D_WriteStackPtr;
  148. struct MF3D_WriteStack
  149. {    MF3DBinaryFilePosition    location;
  150.     MF3D_WriteStackPtr        next;
  151. };
  152.  
  153. /*==============================================================================
  154.  *    MF3D_GroupState
  155.  *
  156.  *    NOTE: Group State is not actually useful in this release.
  157.  *==============================================================================
  158.  */
  159. typedef    struct MF3D_GroupState        MF3D_GroupState, *MF3D_GroupStatePtr;
  160.  
  161. struct MF3D_GroupState
  162. {    MF3DDisplayGroupStateFlags    traversalFlags;        /* group state            */
  163.     MF3D_GroupStatePtr            parent;                /* stack link            */
  164. };
  165.  
  166. /*==============================================================================
  167.  *    MF3D_ResolveState
  168.  *
  169.  *    Information used during a ResolveReference call.
  170.  *==============================================================================
  171.  */
  172. typedef    struct MF3D_FileRec                MF3D_FileRec, *MF3D_FilePtr;
  173.  
  174. enum MF3D_ResolutionStateEnum
  175. {    MF3D_NotResolvingReference,
  176.     MF3D_ResolvingReference,
  177.     MF3D_ResolvingGroup,
  178.     MF3D_ResolvingFile    = MF3D_ResolvingGroup
  179. };
  180.  
  181. typedef    struct MF3D_ResolveStuff
  182. {    MF3DUns32                    resState;    /* read: resolving reference?    */
  183.     MF3D_FilePtr                reference;    /* read: link down to reference    */
  184.     MF3D_FilePtr                parent;        /* read: link up to parent        */
  185.     MF3DBinaryFilePosition        returnLoc;    /* read: return location        */
  186. } MF3D_ResolveStuff;
  187.  
  188. /*==============================================================================
  189.  * MF3D_FileRec:
  190.  *    Internal file record.
  191.  *==============================================================================
  192.  */
  193. typedef    enum MF3D_ReadWriteEnum
  194. {    MF3D_MetafileRead,
  195.     MF3D_MetafileWrite
  196. } MF3D_ReadWriteEnum;
  197.  
  198. typedef struct MF3D_IOPrimitiveMethods    *MF3D_IOPrimitivesTable;
  199.  
  200. struct MF3D_FileRec                            /* internal file record            */
  201. {    MF3DUserFilePtr                userFilePtr;/* user-provided file pointer    */
  202.     MF3D_ReadWriteEnum            readWrite;    /* reading or writing            */
  203.     MF3DDataFormatEnum            dataFormat;    /* binary, swapped, or text        */
  204.     MF3DProcsRec                procsRec;    /* internal record to callbacks    */
  205.     MF3D_IOPrimitivesTable        primitives;    /* i/o methods table            */
  206.     MF3D_ReadBuffer                readBuffer;    /* object-sized data buffer        */
  207.     MF3DUns32                    inContainer;/* processing in a container    */
  208.     MF3D_TOCStuff                tocStuff;    /* table of contents info        */
  209.     MF3DBinaryFilePosition        tocLocation;/* bin write: TOC ptr in header    */
  210.     MF3D_ObjectTable            objTable;    /* txt: index to all objects    */
  211.     MF3DUns16                    indent;        /* txt write: indentation        */
  212.     MF3D_GroupState                groupState;    /* read: current attributes        */
  213.     MF3D_TypeTable                typeTable;    /* user-defined types            */
  214.     MF3D_ResolveStuff            resStuff;    /* read: reference resolution    */
  215.     MF3D_WriteStackPtr            writeStack;    /* bin write: container locs    */
  216. };
  217.  
  218. #define    kMF3D_MaxIndentation                127
  219.  
  220. #endif
  221.